package day17;
/*本类用于测试单例设计模式 1 - 饿汉式*/
public class Singleton1 {
    public static void main(String[] args) {
        //6.通过类名调用getSingle()方法获取本类对象
        MySingle single1 = MySingle.getSingle();
        MySingle single2 = MySingle.getSingle();

        //7.测试获取到的这两个引用类型变量是否相等
        System.out.println(single1 == single2);//true,==比较的是地址值,说明是同一个对象
        System.out.println(single1);//cn.tedu.single.MySingle@1b6d3586
        System.out.println(single2);//cn.tedu.single.MySingle@1b6d3586
    }
}
//0.创建自己的单例程序
class MySingle{
    //1.提供构造方法,并将构造方法私有化
    /*1.构造方法私有化的目的:为了不让外界随意实例化/new本类对象*/
    private MySingle(){ };

    /*3.思考:构造方法和对象私有化后,通过公共的访问点来获取对象,那外界如何调用这个公共方法呢?
    * 之前我们都是在外部创建本类对象并进行方法调用,但是现在单例程序中外部无法直接创建本类对象
    * 解决方案:我们可以利用之前学习的静态的概念,将方法修饰成静态的,就可以通过类名直接调用啦
    * 注意事项:静态只能调用静态,所以静态方法中返回的对象也需用静态修饰*/
    //2.在类的内部,创建本类对象,并且私有化
    //5.2本资源也需要使用static修饰,因为静态方法getSingle()只能调用静态资源
    static private MySingle single = new MySingle();

    /*2.也就是以公共的方式向外界提供获取本类私有对象的方法*/
    //3.对外提供一个公共的全局访问点
    //5.1用static关键字来修饰本方法,为了外部可以通过类名直接调用本方法
    static public MySingle getSingle(){
        //4.把内部创建好的对象返回到调用位置,谁调用这个方法,谁就能拿到返回的single对象
        return single;
    }

}